Published on

Nestjs 공식문서 부수기 [3]

NestJS의 공식문서를 보며 직접 따라해보고 배워보도록 하겠습니다. (NestJS, n.d.)

컨트롤러 [2]

동적 라우팅

ts
import { Param } from '@nestjs/common';

@Get(':id')
findOne(@Param() params): string {
  console.log(params.id);
  return `This action returns a #${params.id} cat`;
}

url의 id값에 따라 동적으로 랜더링 할 수 있습니다.

하위 도메인 라우팅

@Controller데코레이터는 들어오는 요청의 HTTP 호스트가 특정 값과 일치하도록 요구하는 옵션을 사용할 수 있습니다

ts
@Controller({ host: 'admin.example.com' })
export class AdminController {
  @Get()
  index(): string {
    return 'Admin page';
  }
}

경고 Fastify 는 중첩 라우터에 대한 지원이 없기 때문에 하위 도메인 라우팅을 사용할 때 (기본) Express 어댑터를 대신 사용해야 합니다.

이러한 방식으로 선언된 호스트 파라미터는 @HostParam()메서드로 접근해야 사용하여 액세스할 수 있습니다.

ts
@Controller({ host: ':account.example.com' })
export class AccountController {
  @Get()
  getInfo(@HostParam('account') account: string) {
    return account;
  }
}

비동기

모든 비동기 함수는 Promise. 즉, Nest가 자체적으로 해결할 수 있는 지연된 값을 반환할 수 있습니다.

ts
@Get()
async findAll(): Promise<any[]> {
  return [];
}

페이로드 요청

POST URL 매개변수을 허용하지 않았습니다. 여기에 @Body() 데코레이터 를 추가하여 이 문제를 해결해 보겠습니다 .

그러나 먼저(TypeScript를 사용하는 경우) DTO (Data Transfer Object) 스키마 를 결정해야 합니다 . DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 개체입니다. TypeScript 인터페이스를 사용하거나 간단한 클래스 를 사용하여 DTO 스키마를 결정할 수 있습니다. 흥미롭게도 여기에서 클래스 를 사용하는 것이 좋습니다. 왜요? 클래스는 JavaScript ES6 표준의 일부이므로 컴파일된 JavaScript에서 실제 엔터티로 보존됩니다. 반면에 TypeScript 인터페이스는 변환 중에 제거되기 때문에 Nest는 런타임에 이를 참조할 수 없습니다. 이것은 파이프 와 같은 기능이 런타임에 변수의 메타 유형에 액세스할 때 추가 가능성을 가능하게 하기 때문에 중요합니다.

CreateCatDto클래스 를 생성해 보겠습니다 .

create.dto.ts
export class CreateCatDto {
  name: string;
  age: number;
  breed: string;
}

그런 다음 새로 생성된 DTO를 내부에서 사용할 수 있습니다.

Controller.ts
@Post()
async create(@Body() createCatDto: CreateCatDto) {
  return 'This action adds a new cat';
}

시작 및 실행

위의 컨트롤러가 완전히 정의된 상태에서 Nest는 여전히 컨트롤러가 존재하는지 알지 못 하므로 이 클래스의 인스턴스를 생성하지 않습니다.

컨트롤러는 항상 모듈 데코레이터에 속하므로 controllers속성에 controller을 추가합니다.

app.module.ts
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';

@Module({
  controllers: [CatsController],
})
export class AppModule {}

이전 글

Nestjs 공식문서 부수기 [2]

다음 글

Nestjs 공식문서 부수기 [4]

NestJS. (n.d.). NestJS 공식문서. https://docs.nestjs.com